package com.small.nine.wxmp.service;

import com.small.nine.wxmp.domain.bean.wx.WxInMsgBean;
import com.small.nine.wxmp.domain.bean.wx.WxMenuButtonBean;
import com.small.nine.wxmp.domain.bean.wx.kf.WxKfAccountBean;
import com.small.nine.wxmp.domain.bean.wx.qrCode.WxTicketBean;
import com.small.nine.wxmp.domain.bean.wx.template.WxTemplateIdBean;
import com.small.nine.wxmp.domain.bean.wx.template.WxTemplateIndustryBean;
import com.small.nine.wxmp.domain.bean.wx.template.WxTemplateListBean;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 微信公众号相关API服务层
 *
 * @author sheng_zs@126.com
 * @date 2021-07-26 9:22
 */
public interface WxService {
    /**
     * 微信接入，验证是否是微信发送的信息
     *
     * @param signature 加密后的字符串
     * @param timestamp 时间戳
     * @param nonce     随机数
     * @param echoStr   返回的字符串
     * @return 满足条件返回 echoStr
     */
    String checkSignature(String signature, String timestamp, String nonce, String echoStr);

    /**
     * 处理发送的消息
     *
     * @param msgBean   {@link WxInMsgBean}，公众号关注者发送的消息
     * @param signature 加密后的字符串
     * @param timestamp 时间戳
     * @param nonce     随机数
     * @return 返回 XMl 字符串
     */
    String msgHandle(WxInMsgBean msgBean, String signature,
                     String timestamp, String nonce, String encType, String msgSignature);

    /**
     * 获取 access_token
     *
     * @return access_token
     */
    String getAccessToken();

    /**
     * 强制刷新 微信 access_token，并返回
     *
     * @return access_token
     */
    String forceRefreshAccessToken();

    /**
     * 微信公众号创建菜单
     *
     * @param beans 菜单按钮
     * @return 微信服务器返回信息
     */
    Map<String, Object> createMenu(List<WxMenuButtonBean> beans);

    /**
     * 微信公众号删除菜单
     *
     * @return 微信服务器返回信息
     */
    Map<String, Object> deleteMenu();

    /**
     * 添加客服账号：测试号不支持
     *
     * @param bean {@link WxKfAccountBean}
     * @return 微信服务器返回信息
     */
    @Deprecated
    Map<String, Object> addCustom(WxKfAccountBean bean);

    /**
     * 删除客服账号：测试号不支持
     *
     * @param account 客服账号
     * @return 微信服务器返回信息
     */
    @Deprecated
    Map<String, Object> delCustom(String account);

    /**
     * 获取所有的客服账号：测试号不支持
     *
     * @return 客服 List
     */
    @Deprecated
    List<WxKfAccountBean> getKfList();

    /**
     * 创建 临时二维码
     *
     * @return 临时二维码
     */
    WxTicketBean createTemporaryQrCode();

    /**
     * 获取 二维码
     *
     * @param response {@link HttpServletResponse}
     */
    void getQrCode(HttpServletResponse response);

    /**
     * 设置行业
     *
     * @param primaryIndustry   主行业
     * @param secondaryIndustry 副行业
     * @return {@link Map} 微信服务器返回信息
     */
    Map<String, Object> setIndustry(String primaryIndustry, String secondaryIndustry);

    /**
     * 获取行业
     *
     * @return 1 成功
     */
    WxTemplateIndustryBean getIndustry();

    /**
     * 获取私有模板
     *
     * @return {@link WxTemplateListBean}
     */
    WxTemplateListBean getAllTemplate();

    /**
     * 添加模板
     *
     * @param shortId 模板库中模板的编号，有“TM**”和“OPENTMTM**”等形式
     * @return {@link WxTemplateIdBean}
     */
    @Deprecated
    WxTemplateIdBean addTemplate(String shortId);

    /**
     * 发送模板消息
     */
    Map<String, Object> sendTemplateMsg();
}
